
#include "weatherdata.h"
#include <QJsonDocument>
#include <QJsonParseError>
#include <QJsonObject>
#include <QJsonValue>
#include <QJsonArray>
#include <QDateTime>
  
Today::Today()
{
    date = "0000-00-00";
    city = "null";
    wendu = "0℃";
    shidu = "0%";
    pm25 = "0";
    quality = "未知";
    ganmao = u8"无数据";
    fx = u8"无数据";
    fl = u8"无数据";
    type = u8"无数据";
    sunrise = "00:00";
    sunset = "00:00";
    notice = u8"无数据";
}


/*
Today& Today::operator=(const QJsonObject& obj)
{
    QString dateStr = obj.value("date").toString();
    date = QDate::fromString(dateStr, "yyyyMMdd").toString("yyyy-MM-dd");
    city = obj.value("cityInfo").toObject().value("city").toString();

    // 解析data
    QJsonObject dataObj = obj.value("data").toObject();
    shidu = dataObj.value("shidu").toString();
    pm25 = QString::number(dataObj.value("pm25").toDouble());
    quality = dataObj.value("quality").toString();
    wendu = dataObj.value("wendu").toString() + u8"°";
    ganmao = dataObj.value("ganmao").toString();
    QJsonArray forecastArr = dataObj.value("forecast").toArray();
    QJsonObject todayObj = forecastArr.at(0).toObject();
    fx = todayObj.value("fx").toString();
    fl = todayObj.value("fl").toString();
    type = todayObj.value("type").toString();
    sunrise = todayObj.value("sunrise").toString();
    sunset = todayObj.value("sunset").toString();
    notice = todayObj.value("notice").toString();
    return *this;
}

*/

Forecast::Forecast()
{
    aqi='0';
    date = u8"00 星期0";
    week = u8"星期0";
    high = u8"高温 0.0℃";
    low = u8"低温 0.0℃";
    type = "undefined";
}


/*
Forecast& Forecast::operator=(const QJsonObject& obj)
{
    date = obj.value("date").toString();
    week = obj.value("week").toString();
    high = obj.value("high").toString();
    low = obj.value("low").toString();
    aqi = QString::number(obj.value("aqi").toDouble());
    type = obj.value("type").toString();
    return *this;
}
*/



// 替换weatherdata.cpp中当前的Today::operator=函数（删除原空校验版本）
Today& Today::operator=(const QJsonObject& obj)
{
    // 1. 解析日期（API根节点的date字段，格式yyyyMMdd）
    QString dateStr = obj.value("date").toString();
    date = QDate::fromString(dateStr, "yyyyMMdd").isValid() ? QDate::fromString(dateStr, "yyyyMMdd").toString("yyyy-MM-dd") : dateStr;

    // 2. 解析城市名（来自cityInfo子对象）
    QJsonObject cityInfoObj = obj.value("cityInfo").toObject();
    city = cityInfoObj.value("city").toString();

    // 3. 解析核心数据（来自data子对象）
    QJsonObject dataObj = obj.value("data").toObject();
    shidu = dataObj.value("shidu").toString(); // 湿度
    pm25 = QString::number(dataObj.value("pm25").toInt()); // PM2.5（数字转字符串）
    quality = dataObj.value("quality").toString(); // 空气质量
    wendu = dataObj.value("wendu").toString() + "℃"; // 温度（加单位）
    ganmao = dataObj.value("ganmao").toString(); // 感冒提示

    // 4. 解析今日风向、风力（来自data.forecast[0]）
    QJsonArray forecastArr = dataObj.value("forecast").toArray();
    if (!forecastArr.isEmpty()) {
        QJsonObject todayForecast = forecastArr.at(0).toObject();
        fx = todayForecast.value("fx").toString(); // 风向
        fl = todayForecast.value("fl").toString(); // 风力
        type = todayForecast.value("type").toString(); // 天气类型
        sunrise = todayForecast.value("sunrise").toString(); // 日出
        sunset = todayForecast.value("sunset").toString(); // 日落
        notice = todayForecast.value("notice").toString(); // 天气提示
    } else {
        // 异常处理：无今日预报时设默认值
        fx = u8"无数据";
        fl = u8"无数据";
        type = u8"无数据";
        notice = u8"无数据";
    }

    return *this;
}

// Forecast赋值重载：校验字段存在性（修复原代码无校验问题）
Forecast& Forecast::operator=(const QJsonObject& obj)
{
    date = obj.contains("date") ? obj.value("date").toString() : "";
    week = obj.contains("week") ? obj.value("week").toString() : "";
    high = obj.contains("high") ? obj.value("high").toString() : "";
    low = obj.contains("low") ? obj.value("low").toString() : "";
    // 处理aqi可能为数字类型（避免直接toString()失败）
    aqi = obj.contains("aqi") ? QString::number(obj.value("aqi").toDouble()) : "0";
    type = obj.contains("type") ? obj.value("type").toString() : "";
    return *this;
}





